#include "recformitem.h"
#include "ui_recformitem.h"
#include <QDebug>
#include <QPropertyAnimation>

RecFormItem::RecFormItem(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::RecFormItem)
{
    ui->setupUi(this);
    // 必须先下载事件过滤器
    ui->recFormItemBox->installEventFilter(this);
}

RecFormItem::~RecFormItem()
{
    delete ui;
}

bool RecFormItem::eventFilter(QObject *watcher, QEvent *event)
{
    // watcher 相当于现在监听的对象
    if(watcher == ui->recFormItemBox)
    {
        // 此时是进入的事件
        if(event->type() == QEvent::Enter)
        {
            // 实现图片上移：添加动画效果
            // 创建动画：不需要挂载到对象树上，因为这个不随程序的运行而结束，而是随着发生完事件就结束，所以需要手动的释放
            QPropertyAnimation* animation = new QPropertyAnimation(ui->recFormItemBox, "geometry");
            animation->setDuration(150);
            animation->setStartValue(QRect(9,9,ui->recFormItemBox->width(), ui->recFormItemBox->height()));
            animation->setEndValue(QRect(9,0,ui->recFormItemBox->width(), ui->recFormItemBox->height()));
            animation->start();
            // 连接槽函数，当这个事件发生完成会发送一个 finish 信号，这个时候就可以释放了
            connect(animation, &QPropertyAnimation::finished, this, [=](){
                delete animation;
            });
        }
        else if(event->type() == QEvent::Leave)
        {
            // 实现图片下移：添加动画效果
            // 创建动画：不需要挂载到对象树上，因为这个不随程序的运行而结束，而是随着发生完事件就结束，所以需要手动的释放
            QPropertyAnimation* animation = new QPropertyAnimation(ui->recFormItemBox, "geometry");
            animation->setDuration(150);
            animation->setStartValue(QRect(9,0,ui->recFormItemBox->width(), ui->recFormItemBox->height()));
            animation->setEndValue(QRect(9,9,ui->recFormItemBox->width(), ui->recFormItemBox->height()));
            animation->start();
            // 连接槽函数，当这个事件发生完成会发送一个 finish 信号，这个时候就可以释放了
            connect(animation, &QPropertyAnimation::finished, this, [=](){
                delete animation;
            });
        }
        return true;
    }
    // 其他的交给原来的事件处理
    return QObject::eventFilter(watcher, event);
}

void RecFormItem::setTextAndImage(const QString& image, const QString& text)
{
    // 设置图片，QSS
    ui->recFormBoxImage->setStyleSheet("image: url(" + image + ")");
    // 设置文本
    ui->recFormItemText->setText(text);
}
